// 下面的一段ifdef代码，我们想让编译器编译的时候，把它裁剪掉（为什么？应该如何裁剪？
    // 为什么：
        // 因为马上我们要将tail.cpp和header.cpp这俩段代码合并成一段代码，而#include "header.cpp"这句话在tail.cpp中已经又过了，所以这里就不需要有了
        // 这段代码的作用仅仅是为了让我们设计测试用例的时候不要报错（要是去掉，则Solution().isPalindrome(121)下面会编辑器报错说找不到这个函数）
    // 怎么做：
        // 就是加一段#ifndef COMPILER_ONLINE ... #endif，这段代码啥意思呢，就是只有我在定义了COMPILER_ONLINE这个宏，我才会编译中间的代码
        // 要是没定义，我就不编译，那怎么定义这个宏呢？命令行指令g++ -D COMPILER_ONLINE，也就是说如果我g++编译指令不加-D COMPILER_ONLINE，这段代码就不会执行
#ifndef COMPILER_ONLINE
#include "header.cpp"
#endif

// 首先问个问题，你用户把代码写好发给服务器，服务器能不能立即编译呢？
    // 答案是不能，因为用户提交的代码只是一个solution类中的解决方法函数，main函数都没有你上哪编译去啊
    // 其次对于绝大多数的问题，都是有输入的测试用例的，你需要在main函数中，调用solution类中的解决方法，给其传入测试用例的输入参数，然后再比对其返回的结果和正确答案是否相同

// 你代码提交上去之后，不是得跑几个测试用例吗，如果你程序输入测试用例，返回的结果和我的标准答案一致，我就说你这个测试用例通过了
// 这个tail.cpp文件就是用来跑测试用例的，每一个test()都是一个测试用例

// 测试用例1，测试121是否是回文串
void Test1()
{
    // 通过定义临时对象，来完成方法的调用
    bool ret = Solution().isPalindrome(121);
    // 121是回文串，所以如果用户提交的代码返回值ret也为true，就说明该测试通过了
    if(ret){
        std::cout << "通过用例1, 测试121通过 ... OK!" << std::endl;
    }
    else{
    // 121是回文串，所以如果用户提交的代码返回值ret是false，就说明该测试没有通过
        std::cout << "没有通过用例1, 测试的值是: 121"  << std::endl;
    }
}

// 测试用例2，测试-10是否是回文串
void Test2()
{
    // 通过定义临时对象，来完成方法的调用
    bool ret = Solution().isPalindrome(-10);
    // -10不是回文串，如果用户提交的代码返回值ret为true，说明测试没有通过，如果ret为fasle，说明测试通过  
    if(!ret){
        std::cout << "通过用例2, 测试-10通过 ... OK!" << std::endl;
    }
    else{
        std::cout << "没有通过用例2, 测试的值是: -10"  << std::endl;
    }
}

// 这就是最终提交给服务器编译器的代码
int main()
{
    Test1();
    Test2();

    return 0;
}